1 重要数据结构
- Tree:语法树。
- Rule:语法树规则
调用sql的explain()方法可以查看执行计划。
2 执行流程
(1) Parser
SparkSqlParser使用第三方语法解析工具ANTLR4解析为语法树。
Spark 1.x使用Scala原生的Parser语法解析器,Spark 2.x使用可定制的ANTLR4。
SparkSqlParser通过AstBuilder遍历语法树,将节点转换为Catalyst优化器系统中的类型,形成Unresolved Logical Plan抽象语法树。所有类型都集成了TreeNode特质。
(2) Analyzer
- 借助Catalog表信息,确定抽象语法树中不确定的属性和关系。如解析表名、模式等。
- 应用Rule到语法树,转换为Resolved Logical Plan。没有动作操作,不执行后续步骤。
(3) Optimizer
SQL优化,如谓词下推、列值裁剪和常量累加等。形成Optimized Logical Plan。
(4) SparkPlanner
应用策略,转化为数据的绑定和操作,形成Physical Plan
(5) PrepareForExecution
主要是插入shuffle操作和内部Row格式转换,形成Executable Physical Plan。
(6) Execute
调用SparkPlan的execute()执行计算,递归触发整棵树的计算。